package com.ruoyi.system.kiteUtils;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.enums.ExcelFieldEnum;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 通用工具
 */
public class CommUtils {

    /**
     * 获取对象中带有@Excel注解的字段信息
     *
     * @param object 目标对象
     * @return 包含字段名、字段值和excelName的列表
     */
    public static List<Map<ExcelFieldEnum, String>> getExcelFields(Object object) {
        List<Map<ExcelFieldEnum, String>> result = new ArrayList<>();
        Class<?> clazz = object.getClass();

        // 遍历所有字段
        for (Field field : clazz.getDeclaredFields()) {
            // 检查是否存在@Excel注解
            Excel excelAnnotation = field.getAnnotation(Excel.class);
            if (excelAnnotation != null) {
                try {
                    // 设置可访问以读取私有字段
                    field.setAccessible(true);
                    // 获取字段值
                    Object value = field.get(object);
                    // 封装信息
                    Map<ExcelFieldEnum, String> info = new HashMap<>();
                    info.put(ExcelFieldEnum.FILED_NAME, field.getName()); //字段名
                    String name = excelAnnotation.name();
                    info.put(ExcelFieldEnum.FILED_VALUE, value == null ? "" : String.valueOf(value)); //字段值
                    info.put(ExcelFieldEnum.EXCEL_ANNOTATION_NAME, excelAnnotation.name()); //@Excel的name属性
                    result.add(info);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                    throw new ServiceException("系统错误");
                }
            }
        }
        return result;
    }

    public static void findUserCode(String name) {
        if (StringUtils.isNotBlank(name)) {
            String userCode = DictUtils.getDictLabel("user_code", name);
            if (StringUtils.isBlank(userCode)) {
                throw new ServiceException("user_code未找到，请联系管理员");
            }
        }
    }

}
